package com.teaching.management.controller.api;

import com.teaching.management.entity.User;
import com.teaching.management.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import jakarta.servlet.http.HttpSession;
import java.util.Map;
import java.util.Optional;

/**
 * 管理员个人信息相关的REST API
 */
@RestController
@RequestMapping("/api/admin/profile")
public class AdminUserProfileRestController {

    @Autowired
    private UserRepository userRepository;

    /**
     * 获取当前登录管理员的个人信息
     */
    @GetMapping
    public ResponseEntity<?> getAdminProfile(HttpSession session) {
        // 验证用户是否是管理员
        User user = (User) session.getAttribute("user");
        if (user == null || !"管理员".equals(user.getRole())) {
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("未授权");
        }

        // 获取用户最新信息
        Optional<User> currentUser = userRepository.findById(user.getUserId());
        if (!currentUser.isPresent()) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("用户不存在");
        }

        // 返回用户信息时，不返回密码
        User adminUser = currentUser.get();
        adminUser.setPassword(null);

        return ResponseEntity.ok(adminUser);
    }

    /**
     * 更新管理员基本信息（不包括密码）
     */
    @PutMapping
    public ResponseEntity<?> updateAdminProfile(@RequestBody User updatedUser, HttpSession session) {
        // 验证用户是否是管理员
        User user = (User) session.getAttribute("user");
        if (user == null || !"管理员".equals(user.getRole())) {
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("未授权");
        }

        // 确保只能修改自己的信息
        if (!user.getUserId().equals(updatedUser.getUserId())) {
            return ResponseEntity.status(HttpStatus.FORBIDDEN).body("只能修改自己的信息");
        }

        // 获取当前用户信息
        Optional<User> currentUser = userRepository.findById(user.getUserId());
        if (!currentUser.isPresent()) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("用户不存在");
        }

        // 只允许修改用户名
        User userToUpdate = currentUser.get();
        userToUpdate.setUsername(updatedUser.getUsername());

        // 保留原密码和角色不变
        // userToUpdate.setPassword(userToUpdate.getPassword());
        // userToUpdate.setRole(userToUpdate.getRole());

        // 保存更新
        User savedUser = userRepository.save(userToUpdate);

        // 更新session中的用户信息
        savedUser.setPassword(null);
        session.setAttribute("user", savedUser);

        return ResponseEntity.ok(savedUser);
    }

    /**
     * 修改管理员密码
     */
    @PutMapping("/password")
    public ResponseEntity<?> changePassword(@RequestBody Map<String, String> passwordData, HttpSession session) {
        // 验证用户是否是管理员
        User user = (User) session.getAttribute("user");
        if (user == null || !"管理员".equals(user.getRole())) {
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("未授权");
        }

        // 获取原密码和新密码
        String oldPassword = passwordData.get("oldPassword");
        String newPassword = passwordData.get("newPassword");

        if (oldPassword == null || newPassword == null) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("原密码和新密码不能为空");
        }

        // 获取当前用户信息
        Optional<User> currentUser = userRepository.findById(user.getUserId());
        if (!currentUser.isPresent()) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("用户不存在");
        }

        User userToUpdate = currentUser.get();

        // 验证原密码
        if (!oldPassword.equals(userToUpdate.getPassword())) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("原密码不正确");
        }

        // 更新密码
        userToUpdate.setPassword(newPassword);
        userRepository.save(userToUpdate);

        return ResponseEntity.ok().body("密码修改成功");
    }
}